{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "17a06eb4",
   "metadata": {},
   "outputs": [],
   "source": [
    "import triton\n",
    "import torch\n",
    "import os\n",
    "import triton.language as tl\n",
    "import cutlass\n",
    "import cutlass.cute as cute\n",
    "from cutlass.cute.runtime import from_dlpack\n",
    "\n",
    "\n",
    "DEVICE = torch.device(\"cuda:0\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cf9f41b4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Here we define the torch code\n",
    "\n",
    "def torch_add(x, y):\n",
    "    return x + y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "bbff1d6b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Here we define the torch compile code\n",
    "\n",
    "@torch.compile\n",
    "def torch_compile_add(x, y):\n",
    "    return x + y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "310b857d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Here we define the triton code\n",
    "\n",
    "@triton.jit\n",
    "def add_kernel(x_ptr,\n",
    "               y_ptr,\n",
    "               output_ptr,\n",
    "               n_elements,\n",
    "               BLOCK_SIZE: tl.constexpr):\n",
    "    pid = tl.program_id(axis=0)\n",
    "    block_start = pid * BLOCK_SIZE\n",
    "    offsets = block_start + tl.arange(0, BLOCK_SIZE)\n",
    "    mask = offsets < n_elements\n",
    "    x = tl.load(x_ptr + offsets, mask = mask)\n",
    "    y = tl.load(y_ptr + offsets, mask = mask)\n",
    "    z = x + y\n",
    "    tl.store(output_ptr + offsets, z, mask = mask)\n",
    "\n",
    "def triton_add(x, y):\n",
    "    output = torch.empty_like(x)\n",
    "    assert x.device == DEVICE and y.device == DEVICE and output.device == DEVICE\n",
    "    n_elements = output.numel()\n",
    "    grid = lambda meta: (triton.cdiv(n_elements, meta['BLOCK_SIZE']), )\n",
    "    add_kernel[grid](x, y, output, n_elements, BLOCK_SIZE=1024)\n",
    "    return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0fb4ca6b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Here we define the cute code\n",
    "\n",
    "os.environ[\"PYTHONUNBUFFERED\"] = \"1\"\n",
    "\n",
    "@cute.kernel\n",
    "def vectorized_elementwise_add_kernel(\n",
    "    gA: cute.Tensor,\n",
    "    gB: cute.Tensor,\n",
    "    gC: cute.Tensor,\n",
    "):\n",
    "    tidx, _, _ = cute.arch.thread_idx()\n",
    "    bidx, _, _ = cute.arch.block_idx()\n",
    "    bdim, _, _ = cute.arch.block_dim()\n",
    "\n",
    "    thread_idx = bidx * bdim + tidx\n",
    "\n",
    "    # Map logical index to physical address via tensor layout\n",
    "    a_val = gA[thread_idx]\n",
    "    b_val = gB[thread_idx]\n",
    "\n",
    "    # Perform element-wise addition\n",
    "    gC[thread_idx] = a_val + b_val\n",
    "\n",
    "@cute.jit\n",
    "def vectorized_elementwise_add(\n",
    "    mA: cute.Tensor,\n",
    "    mB: cute.Tensor,\n",
    "    mC: cute.Tensor\n",
    "):\n",
    "    block_size = 1024\n",
    "    vectorized_elementwise_add_kernel(mA, mB, mC).launch(\n",
    "        grid=(cute.size(mC, mode=[0]) // block_size, 1, 1),\n",
    "        block=(block_size, 1, 1),\n",
    "    )\n",
    "\n",
    "a = torch.randn(2048, device=\"cuda\", dtype=torch.float32)\n",
    "b = torch.randn(2048, device=\"cuda\", dtype=torch.float32)\n",
    "c = torch.zeros(2048, device=\"cuda\", dtype=torch.float32)\n",
    "a_ = from_dlpack(a, assumed_align=16).mark_layout_dynamic()\n",
    "b_ = from_dlpack(b, assumed_align=16).mark_layout_dynamic()\n",
    "c_ = from_dlpack(c, assumed_align=16).mark_layout_dynamic()\n",
    "cute_dsl_add_compiled = cute.compile(vectorized_elementwise_add, a_, b_, c_)\n",
    "\n",
    "def cute_dsl_add(x, y):\n",
    "    out = torch.zeros_like(x)\n",
    "    cute_x = from_dlpack(x, assumed_align=16).mark_layout_dynamic()\n",
    "    cute_y = from_dlpack(y, assumed_align=16).mark_layout_dynamic()\n",
    "    cute_out = from_dlpack(out, assumed_align=16).mark_layout_dynamic()\n",
    "    cute_dsl_add_compiled(cute_x, cute_y, cute_out)\n",
    "    return out\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "6857f8a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "@triton.testing.perf_report(\n",
    "    triton.testing.Benchmark(\n",
    "        x_names=['size'],  # Argument names to use as an x-axis for the plot.\n",
    "        x_vals=[2**i for i in range(12, 28, 1)],  # Different possible values for `x_name`.\n",
    "        x_log=True,  # x axis is logarithmic.\n",
    "        line_arg='provider',  # Argument name whose value corresponds to a different line in the plot.\n",
    "        line_vals=['triton', 'torch', 'torch_compile', 'cute_dsl'],  # Possible values for `line_arg`.\n",
    "        line_names=['Triton', 'Torch', 'Torch Compile', 'Cute dsl'],  # Label name for the lines.\n",
    "        ylabel='GB/s',  # Label name for the y-axis.\n",
    "        plot_name='vector-add-performance',  # Name for the plot. Used also as a file name for saving the plot.\n",
    "        args={},  # Values for function arguments not in `x_names` and `y_name`.\n",
    "    ))\n",
    "def benchmark(size, provider):\n",
    "    x = torch.rand(size, device=DEVICE, dtype=torch.float32)\n",
    "    y = torch.rand(size, device=DEVICE, dtype=torch.float32)\n",
    "    quantiles = [0.5, 0.2, 0.8]\n",
    "    target_function = globals()[provider + \"_add\"]\n",
    "    z = target_function(x, y)\n",
    "    if torch.norm(z - (x + y)) > 1e-7 :\n",
    "        print(provider, torch.norm(z - (x + y)), x.shape)\n",
    "        print(z)\n",
    "        print(x + y)\n",
    "\n",
    "    ms, min_ms, max_ms = triton.testing.do_bench(lambda: target_function(x, y), quantiles=quantiles)\n",
    "    gbps = lambda ms: 3 * x.numel() * x.element_size() * 1e-9 / (ms * 1e-3)\n",
    "    return gbps(ms), gbps(max_ms), gbps(min_ms)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7a48d194",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "vector-add-performance:\n",
      "           size      Triton       Torch  Torch Compile    Cute dsl\n",
      "0        4096.0    9.600000    9.600000       9.600000    8.000000\n",
      "1        8192.0   19.200000   19.755627      19.200000   15.999999\n",
      "2       16384.0   37.349544   38.400001      38.400001   31.346939\n",
      "3       32768.0   63.999998   63.999998      66.064514   54.857142\n",
      "4       65536.0  109.714284  127.999995     127.999995   85.333330\n",
      "5      131072.0  170.666661  170.666661     170.666661  139.636363\n",
      "6      262144.0  255.999991  255.999991     255.999991  219.428568\n",
      "7      524288.0  323.368435  323.368435     236.307695  255.999991\n",
      "8     1048576.0  361.411758  372.363633     372.363633  315.076934\n",
      "9     2097152.0  390.870784  390.095241     385.128315  332.108094\n",
      "10    4194304.0  413.042029  413.042029     420.102553  334.794387\n",
      "11    8388608.0  430.980686  431.157886     433.057275  317.109674\n",
      "12   16777216.0  438.857137  438.857137     436.906674  327.679984\n",
      "13   33554432.0  444.264798  444.311871     443.810387  333.516536\n",
      "14   67108864.0  446.836360  446.975243     446.329164  336.513464\n",
      "15  134217728.0  448.109408  448.492738     448.620660  337.560684\n"
     ]
    }
   ],
   "source": [
    "benchmark.run(print_data=True, show_plots=True)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
